package connect;

import java.util.List;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;

/**
 * 解码器
 * 
 * 编码方式:类型(1byte),长度(4byte)
 * 
 * 类型: 0 心跳 , 1 协议 , 2 文件
 *
 */
public class Decoder extends ByteToMessageDecoder{

	@Override
	protected void decode(ChannelHandlerContext ctx, ByteBuf msg,
			List<Object> out) throws Exception {
          
		if (msg.readableBytes()<5) {
			return;
		}
		msg.markReaderIndex();
		
		byte type=msg.readByte();
		int dataLength=msg.readInt();
		
		if (dataLength<0) {
			ctx.close();
		}
		
		if (msg.readableBytes()<dataLength) {
			msg.resetReaderIndex();
			return;
		}
	
		if (type==0) {
			out.add(msg);
		}else if (type==1) {
			byte[] data=new byte[dataLength];
			msg.readBytes(data);
			Object o=ByteObjConverter.ByteToObject(data);
			out.add(o);
		}
		
		
		
	}

}
